home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Datafile PD-CD 1 Issue 2
/
PDCD-1 - Issue 02.iso
/
_utilities
/
utilities
/
004
/
_cliguard
/
!CLIGuard
/
AppSource
(
.txt
)
< prev
next >
Wrap
RISC OS BBC BASIC V Source
|
1994-09-24
|
69KB
|
2,989 lines
CLI Guardian
To protect you from the CLI
(C) Sam Kington 1994
See Messages file for version (this line won
t be in the crunched code anyway)
26:
0,1);
$; " at line ";
alias$="<CLIGuard$Dir>"
taskname$="CLI Guardian"
WimpInit=
BufferLow=
error :
msgtrans
cliguardvars
setup
readmodules
pollloop
finish
pollloop
poll(stdmask)
setup
assemble
icons
menuinit
messageinit
startwimp
loadtemplates(alias$+".Templates")
loadchoices
refreshchoices
writeicon(win_info, icon_version, version$)
buildmenus
getmodevars
:"baricon%=
iconbar("!cliguard")
loop
block% 1024, string 256
v On=-1
Off=-2
doneiconbar=
_MinMem=4096
stdmask= %11100000110001
nullmask=%11100000110000
idlemask=-1
idlegap=10
currenthandle%=-1
poll(pollmask)
time
EndOfMemory=HIMEM
pollmask<>idlemask
"Wimp_Poll", pollmask, block%
reason%
'
"OS_ReadMonotonicTime"
time
*C
"Wimp_PollIdle", nullmask, block%, time+idlegap
reason%
reason%
redraw
close
fJ
checkmouse(!block%, block%!4, block%!8, block%!12, block%!16)
dragged
checkkeys
menuselect
9
currenthandle%=Iconmenu%
menuy%=menuheight%
(but%
1) =1
:
currenthandle%=Mainmenu%
buildmodulemenu
8
reopenmenu(currenthandle%, menux%, menuy%)
currenthandle%=0
17, 18:
message(reason%)
<_MinMem
moremem
moremem
slotsize, free, add
"Wimp_SlotSize", -1, -1
slotsize,, free
add=free
add>16*1024
add=16*1024
pollloop
assemble
pass, sp, link, pc
code 600
sp=13
link=14
pc=15
WrchV=3
ErrorV=1
RdchV=4
ChangeEnvironmentV=&1E
pass=0
P%=code
[OPT pass
** String read **
.stringread
!STMFD (sp)!, {r0-r3, link}
enter with pointer to original in r0 and output buffer in r1
r2 holds counter, r3 actual value
MOV r2, #0
.start
<'LDRB r3, [r0, r2] ; load byte
F+CMP r3, #0 ; is it a null?
Q r3, #13 ; if it is, replace by a <CR>
Z?STRB r3, [r1, r2] ; store it back whatever the result
d?ADDNE r2, r2, #1 ; if it's OK, increment the pointer
n9BNE start ; and start again - else exit
LDMIA (sp)!, {r0-r3, pc}
** Intercept vector **
.claim
STMFD (sp)!, {r0-r2, link}
3BL setupregs ; Setup for WrchV claim
SWI "OS_Claim"
DBL errorregs ; Setup for ErrorV claim (release WrchV)
SWI "OS_Claim"
FMOV r0, #RdchV ; Same claim for RdchV, ChangeEnvironmentV
SWI "OS_Claim"
#MOV r0, #ChangeEnvironmentV
SWI "OS_Claim"
MOV r0, #0
STR r0, counter
MOV r0, #1
STR r0, bufferclaimed
LDMIA (sp)!, {r0-r2, pc}
.setupregs
@*MOV r0, #WrchV ; WrchV vector
J0ADR r1, intercept ; pointer to routine
TDLDR r2, bufpointer ; point to buffer, will be passed in R12
MOV pc, link
.errorregs
MOV r0, #ErrorV
ADR r1, release
MOV r2, #0
MOV pc, link
.counter
EQUD 0
.bufpointer
-EQUD 0 ; point to buffer
.bufmaxsize
2EQUD 0 ; point to buffer size
.bufferclaimed
@EQUD 0 ; 0 when not claimed, 1 when claimed
.release
STMFD (sp)!, {r0-r2, link}
LDR r0, bufferclaimed
CMP r0, #1
BNE quitrelease
:-BL setupregs ; Setup for WrchV
SWI "OS_Release"
N.BL errorregs ; Setup for ErrorV
SWI "OS_Release"
b@MOV r0, #RdchV ; Same for RdchV, ChangeEnvironmentV
SWI "OS_Release"
v#MOV r0, #ChangeEnvironmentV
SWI "OS_Release"
.quitrelease
SWI &100+26
MOV r0, #0
STR r0, bufferclaimed
LDMIA (sp)!, {r0-r2, pc}
.intercept
STMFD (sp)!, {r9-r12}
/LDR r11, counter ; Get counter value
.LDR r10, bufmaxsize ; Get maximum size
0CMP r11, r10 ; Check for overflow
BGE quitintercept
;CMP r0, #32 ; Is this a writable character?
-BGE writebuffer ; If so, write it
,CMP r0, #9 ; Is this a tab?
Q r0, #32 ; If so, replace it by a space
*+BEQ writebuffer ; and write it.
44CMP r0, #13 ; Is this a return then?
>*BNE quitintercept ; If not, quit
HBCMP r11, #0 ; Check if this is the first character
REBEQ quitintercept ; If so, quit to avoid a blank first line
.writebuffer
fMSTRB r0, [r12, r11] ; We're OK, so store in buffer, offset by counter
p/ADD r11, r11, #1 ; increment counter
z)STR r11, counter ; put it back
.quitintercept
VLDMIA (sp)!, {r9-r12, pc} ; Pass control back to whoever called the vector
** Parse **
parse enters with pointer to text in r0, lines in r1, info in r2, last char in r3
stores numlines in r2+0, width in r2+4
r4 number of chars, r5 number of lines, r6 character, r7 max width
.parse
STMFD (sp)!, {r0-r7, link}
$MOV r4, #0 ; char 0
$MOV r5, #0 ; line 0
*MOV r7, #0 ; no width yet
BSTR r0, [r1] ; Store pointer to first line in lines
.parseloop
$'LDRB r6, [r0, r4] ; load char
.-CMP r6, #13 ; is it a return?
8GADDNE r4, r4, #1 ; if not, increment number of chars in line
B+BNE parseloop ; and loop back
.testwidth
V0CMP r4, r7 ; compare with width
`LMOVGT r7, r4 ; if it's greater, replace the old maximum width
.testend
t7ADD r4, r4, #1 ; increment number of chars
~/ADD r0, r0, r4 ; add it to pointer
*MOV r4, #0 ; zero pointer
4CMP r0, r3 ; is this the last char?
UADDLT r5, r5, #1 ; if not, this is a new line, so add 1 to number of lines
9ADDLT r1, r1, #4 ; increment line pointer by 4
@STRLT r0, [r1] ; store pointer to beginning of char
&BLT parseloop ; and loop
/.exit ; otherwise tidy up
;STR r5, [r2] ; store number of lines in r2+0
9STR r7, [r2, #4] ; store maximum width in r2+4
LDMIA (sp)!, {r0-r7, pc}
.caseless
!STMFD (sp)!, {r0, r1, link}
.start
LDRB r1, [r0]
CMP r1, #13
BEQ quit
CMP r1, #65
BLT reloop
CMP r1, #90
ADDLE r1, r1, #32
STRLEB r1, [r0]
.reloop
ADD r0, r0, #1
B start
.quit
LDMIA (sp)!, {r0, r1, pc}
cliguardvars
loop, varbuf
bufferclaimed=-1
Misc
version$=
mess("Ver")
tab$=
varbuf 256
"OS_ReadVarVal", "CLIGuard$Dir", varbuf, 256, 0, 3
,,numread
varbuf?numread=13
r"StartCLIGuard$="%Run "+$varbuf
illegal$(255)
illegal$()="wimpslot", "copy", "wipe", "rename", "append", "build", "breakclr", "continue", "backup", "format", "run", "\", "checkmap", "debug", "quit", "basic", "map", "delete"
textcol(15)
<textcol()=7, 7, 7, 7, 0, 0, 0, 0, 0, 7, 0, 0, 7, 0, 7, 7
Buffers
numbuffers=16
_Start=0
_Info=1
_Flags=2
_Help=3
_End=4
_Handle=5
buffernums=5
textbuffer(numbuffers, buffernums)
_TextOffset=64
bufferwindows=0
BufferLow=
BufferHigh=
loop=1
numbuffers : textbuffer(loop, _Start)=-1 :
helpcode$(4)
loop=1
X, helpcode$(loop)=
mess("Help"+
(loop))
maxhelplines=64
helpbuffer maxhelplines*4, helpflags maxhelplines
arrow=&203E3D3D :
"==> "
*bufferstate=-1 :
no buffers modified
Window
winopen_modules=
$modwinwidth=1000 :
dummy value
/oldmodwidth=42 :
deliberately different
Short=1
Long=2
oldshowname=Short
oldshowver=
oldshowspec=
oldshowstatus=
fontsize=12
texthandle=-1
greyhandle=-1
headhandle=-1
Text=1
Greyed=2
Heading=3
fonttype=-1
Modules
maxmodules=256
modulestep=10
moddim=32
helpdim=90
namedim=32
verdim=24
specdim=32
numstatus=6
moduleop=
mod$(maxmodules), help$(maxmodules), status maxmodules
name$(maxmodules), ver$(maxmodules), spec$(maxmodules)
modstatus$(numstatus)
modbase(maxmodules)
alphasort maxmodules, sequencesort maxmodules, versionsort maxmodules
=modlen=0 : namelen=0 : verlen=0 : speclen=0 : statuslen=0
prefsort=sequencesort
oldprefsort=sequencesort
readmodules=
loop=0
numstatus
$- modstatus$(loop)=
mess("Stat"+
(loop))
Choices
_IconMod=0
_IconHelp=1
_IconComm=2
_WinHelp=0
_WinComm=1
_WinSave=2
_WinClose=3
_Iconbar=0
_Window=1
_ModWin=2
_Select=4
_Adjust=1
_Shift=8
_Ctrl=16
_Alt=32
mouseclick(1,3), tempmouseclick(1,3)
defaultchoices
sortmenunumber(sort)
sort
<&
alphasort : num=menu_sortname
F(
sequencesort : num=menu_sortnum
P'
versionsort : num=menu_sortver
readmodules
maxlen, inspos, lastinspos, stop, loop, maxwinheight, oldnummods, changed
** Initial stuff **
"Hourglass_On"
nummodules=0
inspos=1
lastinspos=1
tab$=
=modlen=0 : namelen=0 : verlen=0 : speclen=0 : statuslen=0
moduleop=
loop=1
maxmodules : status?loop=0 :
loop=1
alphasort?loop=0
sequencesort?loop=0
oldshowname=showname
showname=Short
showver=
showspec=
showstatus=
prefsort=sequencesort
loop=menu_sortname
menu_showspec
faintmenu(Displaymenu%, loop,
tickmenu(Displaymenu%, loop,
faintmenu(Displaymenu%, menu_shortname,
tickmenu(Displaymenu%, menu_shortname,
loop=menu_modinfo
menu_modromver
faintmenu(Modulemenu%, loop,
!block%=-2
"Wimp_GetWindowState",,block%
topiconbar=block%!16
'winheight=MaxYCoord-topiconbar-2450
winopen_modules
!block%=win_modules
0'
"Wimp_GetWindowState",,block%
block%!24=0
D#
"Wimp_OpenWindow",,block%
** Read modules **
rammodules
recalctabs
moduleextent
winopen_modules
forceredraw(win_modules)
readmodules=
faintmenu(Displaymenu%, menu_sortnum,
tickmenu(Displaymenu%, menu_sortnum,
faintmenu(Modulemenu%, menu_modinfo,
faintmenu(Modulemenu%, menu_modhelp,
currenthandle%=Mainmenu%
Fontmenu%=-1
reopenmenu(currenthandle%, menux%, menuy%)
** Find ROM modules **
oldnummods=nummodules
rommodules
loop=menu_moddelete
menu_modromver
4'
faintmenu(Modulemenu%, loop,
moduleop=
faintmenu(Displaymenu%, menu_showstatus,
oldshowstatus
showstatus=
p2
tickmenu(Displaymenu%, menu_showstatus,
recalctabs
moduleextent
forceredraw(win_modules)
currenthandle%=Mainmenu%
Fontmenu%=-1
reopenmenu(currenthandle%, menux%, menuy%)
nummodules<>oldnummods
moduleextent
** Build alphabetical sort order **
buildsort(alphasort, mod$())
faintmenu(Displaymenu%, menu_sortname,
oldprefsort=alphasort
tickmenu(Displaymenu%,
sortmenunumber(alphasort),
$<
tickmenu(Displaymenu%,
sortmenunumber(prefsort),
prefsort=alphasort
8
forceredraw(win_modules)
currenthandle%=Mainmenu%
VC
Fontmenu%=-1
reopenmenu(currenthandle%, menux%, menuy%)
** Parse help strings **
loop=1
nummodules
(status?loop=3
status?loop=4)
gethelpinfo(help$(loop), name$(loop), ver$(loop), spec$(loop))
timeout(loop)
faintmenu(Displaymenu%, menu_longname,
faintmenu(Displaymenu%, menu_showver,
faintmenu(Displaymenu%, menu_showspec,
changed=
oldshowname=Long
changed=
showname=
tickmenu(Displaymenu%, menu_longname,
tickmenu(Displaymenu%, menu_shortname,
oldshowver=
changed=
showver=
2/
tickmenu(Displaymenu%, menu_showver,
oldshowspec=
changed=
showspec=
d0
tickmenu(Displaymenu%, menu_showspec,
changed
recalctabs
moduleextent
forceredraw(win_modules)
currenthandle%=Mainmenu%
Fontmenu%=-1
reopenmenu(currenthandle%, menux%, menuy%)
** Build version sort order **
buildsort(versionsort, ver$())
faintmenu(Displaymenu%, menu_sortver,
oldprefsort=versionsort
tickmenu(Displaymenu%,
sortmenunumber(versionsort),
tickmenu(Displaymenu%,
sortmenunumber(prefsort),
prefsort=versionsort
"
forceredraw(win_modules)
currenthandle%=Mainmenu%
@C
Fontmenu%=-1
reopenmenu(currenthandle%, menux%, menuy%)
"Hourglass_Off"
rammodules
modnum, modinst, oldmodnum, oldmodinst, base, postfix
change, name$
modnum=0
modinst=0
nummodules=0
nummodules+=1
, oldmodnum=modnum : oldmodinst=modinst
"XOS_Module", 12, modnum, modinst
,modnum,modinst,base,,postfix
6 change=modnum-oldmodnum+(modinst-oldmodinst)*10
change<>0
" modbase(nummodules)=base
, name$=
readstring(base+base!16, 0)
&8 help$(nummodules)=
readstring(base+base!20, 0)
0;
modinst<>0
name$+="%"+
readstring(postfix, 0)
: mod$(nummodules)=name$
D-
(name$)>modlen
modlen=
(name$)
N, sequencesort?nummodules=nummodules
nummodules-=1
change=0
rommodules
num, modnum, modsect, romstat, statlen
ramnum, oldramnum, match, ver, ver$
rom$(), ukver$
rom$(maxmodules)
ukver$=
mess("UKVer")
,modnum=0 : modsect=-1 : num=0 : ramnum=0
num+=1
"XOS_Module", 20, modnum, modsect
r0,modnum,modsect,name,romstat,,ver
ver$=
~(ver)))
# ver$=
ver$,1)+"."+
ver$,2,2)
r0=20
4( rom$(num)=
readstring(name, 0)
romstat<>-1
H' match=
: oldramnum=ramnum
ramnum+=1
f*
mod$(ramnum)=rom$(num)
p* status?ramnum=romstat+4
z0
romstat=0
status?ramnum=2
( statlen=status?ramnum
match=
6
status?ramnum=0
status?ramnum=1
ramnum+=1
1
ramnum>nummodules
ramnum=1
'
match
ramnum=oldramnum
"
match
romstat=-1
nummodules+=1
' mod$(nummodules)=rom$(num)
( name$(nummodules)=rom$(num)
) ver$(nummodules)=ver$+ukver$
( status?nummodules=romstat+4
& statlen=status?nummodules
$/ sequencesort?nummodules=nummodules
ramnum=oldramnum
B( statlen=
(modstatus$(statlen))
L1
statlen>statuslen
statuslen=statlen
timeout(num)
r0<>20
timeout(num)
num
modulestep=0
"Hourglass_Off"
poll(idlemask)
"Hourglass_On"
buildsort(sort, array$())
inspos, stop, cond, test, origtest, first, last
module=1
nummodules
module=1
inspos=1
sort?inspos=module
first=1
last=module
d% inspos=
((first+last)/2)
n9 origtest=array$(module)<=array$(sort?inspos)
x4
origtest
last=inspos
first=inspos
last-first<4
inspos=
(module/2)
6 origtest=array$(module)<=array$(sort?inspos)
'
origtest
cond=-1
cond=1
stop=
7 test=(array$(module)<=array$(sort?inspos))
&
test<>origtest
stop=
0
inspos=module
inspos=1
stop=
"
stop inspos+=cond
stop
inspos<module
+
test
cond=-1
inspos+=1
*
loop=module
inspos+1
' sort?loop=sort?(loop-1)
sort?inspos=module
timeout(module)
moduleextent
!block%=0
block%!4=-nummodules*32-8
block%!8=maxlen*16+8
block%!12=0
"Wimp_SetExtent", win_modules, block%
winopen_modules
openmodulewindow
openmodulewindow
!block%=win_modules
"Wimp_GetWindowState",,block%
!block%=win_modules
block%!4=0
block%!8=topiconbar
block%!12=modwinwidth
block%!16=MaxYCoord-44
block%!20=0
block%!24=0
"Wimp_OpenWindow",,block%
winopen_modules=
modnumber(my%)=
winline(win_modules, my%)
winline(win, my%)
worky, line
!block%=win
"Wimp_GetWindowState",,block%
#worky=my%-(block%!16-block%!24)
line=
(-worky/32)+1
=line
gethelpinfo(help$,
name$,
ver$,
spec$)
help$, tab$)
name$=
help$, pos-1)
help$=
help$,
(help$)-pos)
help$,1)=tab$
* help$=
help$,
(help$)-1)
help$, ")")
pos=0
pos=
(help$)
ver$=help$
spec$=""
ver$=
help$, pos)
z$ spec$=
help$,
(help$)-pos-1)
(name$)>namelen
namelen=
(name$)
(ver$)>verlen
verlen=
(ver$)
(spec$)>speclen
speclen=
(spec$)
fillinmodinfo
help$, name$, ver$, spec$
pos, tab$, modnum, num
num=prefsort?selmod
name$(num)=""
gethelpinfo(help$(num), name$(num), ver$(num), spec$(num))
writeicon(win_modinfo, icon_modname, name$(num))
writeicon(win_modinfo, icon_modver, ver$(num))
writeicon(win_modinfo, icon_modspecial, spec$(num))
writeicon(win_modinfo, icon_modstatus, modstatus$(status?num))
recalctabs
showname=Short
maxlen=modlen
maxlen=namelen
showver
vertab=maxlen+1
maxlen+=verlen+1
showstatus
statustab=maxlen+1
maxlen+=statuslen+1
showspec
spectab=maxlen+1
maxlen+=speclen+1
modwinwidth=8+maxlen*16
modcommand(cmd$)
flags, r0, mod, mod$
wasrom, inst, base, postfix
mod=prefsort?selmod
mod$=mod$(mod)
"XOS_CLI", cmd$+" "+mod$
r0; flags
(flags
1)>0
report(
messarg("ModErr", cmd$, mod$(mod), "", "")+
readstring(r0+4, 0)) :
wasrom=(status?mod)>=2
cmd$
"Unplug"
.
wasrom
report(
mess("UnRAM"))
status?mod=3
"RMReInit", "RMFaster"
B
"XOS_Module", 18, mod$
r0,,inst,base,,postfix;flags
J
(flags
1)>0
report(
mess("NoMod")+
readstring(r0+4, 0)):
modbase(mod)=base
0 mod$(mod)=
readstring(base+base!16, 0)
1 help$(mod)=
readstring(base+base!20, 0)
<
inst<>0
mod$(mod)+="%"+
readstring(postfix, 0)
E
gethelpinfo(help$(mod), name$(mod), ver$(mod), spec$(mod))
cmd$="RMReInit"
$
wasrom
status?mod=1
status?mod=2
"RMKill"
wasrom
status?mod=4
^&
loop=mod
nummodules-1
h' mod$(loop)=mod$(loop+1)
r) name$(loop)=name$(loop+1)
|' ver$(loop)=ver$(loop+1)
) spec$(loop)=spec$(loop+1)
+ status?loop=status?(loop+1)
*
deletemod(sequencesort, mod)
'
deletemod(alphasort, mod)
)
deletemod(versionsort, mod)
nummodules-=1
moduleextent
forceredraw(win_modules)
deletemod(sort, num)
mod, shift
shift=
mod=1
nummodules
shift
sort?mod>=num
sort?mod=num
shift=
sort?mod-=1
shift
sort?mod=sort?(mod+1)
&
sort?mod>num
sort?mod-=1
modhelp
offset, mod, string$, code, info, syntax, help, loop
min, map, max, flags, filesystem, configure, codehelp
helpbuf, buffer, bufbase, numlines, firstmatch, match, metaflags, lineflags
mod=prefsort?selmod
offset=modbase(mod)!&18
!>Ohelpbuf=
startnewbuffer(
messarg("Help",
mess("HMod"), mod$(mod), "", ""))
HelpInfo=
!R2buffer=textbuffer(helpbuf, _Start)+_TextOffset
bufbase=buffer
helpline=0
writebuffer(buffer,
striptabs(help$(mod)))
offset<>0
loop=1
. offset=modbase(mod)+modbase(mod)!&18
firstmatch=
+ string$=
readstring(offset, 0)
string$<>""
$ offset+=
(string$)+1
0
offset
4<>0 : offset+=1 :
code=!offset
flags=offset?7
- filesystem=(flags
(1<<7))>0
, configure=(flags
(1<<6))>0
+ codehelp=(flags
(1<<5))>0
help=offset!12
E metaflags=(code<>0)*-1 + filesystem*-2 + configure*-4
4 lineflags=codehelp*-1 + configure*-2
match=
".G
meta-flags: code bit 0, filesystem bit 1, configure 2
"8G
help flags: code help bit 0, configure bit 1, type<<2
loop
"L,
1 : match=(metaflags=1)
"V,
2 : match=(metaflags=3)
"`,
3 : match=(metaflags=5)
"j,
4 : match=(metaflags=0)
match
% lineflags+=loop<<2
!
firstmatch
.
writebuffer(buffer, "")
;
writebuffer(buffer, helpcode$(loop))
.
writebuffer(buffer, "")
" firstmatch=
0
writebuffer(buffer, string$)
3 helpflags?(helpline-1)=lineflags
L
help<>0
helpbuffer!((helpline-1)*4)=help+modbase(mod)
offset+=16
string$=""
writebuffer(buffer, "")
capbuffer(helpbuf, buffer)
openwindow(textbuffer(helpbuf, _Handle))
striptabs(str$)
pos=
str$,
pos<>0
str$, pos, 1)=" "
pos=0
=str$
writebuffer(
buffer, str$)
$buffer=str$
buffer+=
(str$)+1
helpbuffer!(helpline*4)=0
helpflags?helpline=0
helpline+=1
startnewbuffer(title$)
slotsize, next, free, newhigh, loop, bufnum, start
"Wimp_SlotSize", -1, -1
slotsize, next, free
free=0
bufferwindows=16
report(
mess("NoMem")) :
pollloop
newhigh=
+slotsize+free
=newhigh
bufferwindows+=1
bufnum=0
loop=1
bufferwindows
textbuffer(loop, _Start)=-1
bufnum=loop
bufnum=0
=BufferHigh :
report(
mess("NoVFree")) :
pollloop
bufferstate=bufnum
&textbuffer(bufferwindows, _Help)=0
'textbuffer(bufferwindows, _Flags)=0
HelpInfo=
0textbuffer(bufferwindows, _Start)=BufferHigh
+textbuffer(bufferwindows, _End)=newhigh
start=BufferHigh
modhelpwin!72=start
modhelpwin!4-=bufnum*40
modhelpwin!12-=bufnum*40
"Wimp_CreateWindow",,modhelpwin
textbuffer(bufferwindows, _Handle)
modhelpwin!4+=bufnum*40
modhelpwin!12+=bufnum*40
%0"$start=
title$, _TextOffset-1)
BufferHigh=newhigh
=bufferwindows
capbuffer(bufnum, endbuf)
start, info, flags, help, loop
parse enters with pointer to text in r0, lines in r1, info in r2, last char in r3
stores numlines in r2+0, width in r2+4
r4 number of chars, r5 number of lines, r6 character, r7 max width
bufferstate=bufnum*32
info=(endbuf
4)*4+8
"textbuffer(bufnum, _Info)=info
0start=textbuffer(bufnum, _Start)+_TextOffset
A%=start
B%=info+8
C%=info
D%=endbuf
parse
HelpInfo
flags=info+16+!info*4
loop=0
helpline-1
&*# flags?loop=helpflags?loop
help=flags+helpline+8
loop=0
helpline-1
&R+ help!(loop*4)=helpbuffer!(loop*4)
&f endbuf=help+helpline*4+16
endbuf=info+16+!info*4
help=0
flags=0
$textbuffer(bufnum, _Flags)=flags
"textbuffer(bufnum, _Help)=help
#textbuffer(bufnum, _End)=endbuf
endbuf<BufferHigh
BufferHigh=endbuf
=BufferHigh
!block%=0
block%!4=-!info*32-40
block%!8=(info!4)*16+8
block%!12=0
"Wimp_SetExtent", textbuffer(bufnum, _Handle), block%
bufferstate=-1
removebuffer(bufnum)
start, end
textbuffer(bufnum, _End)=BufferHigh
'jM
bufferwindows=1
start=BufferLow
start=textbuffer(bufnum, _Start)
BufferHigh=start
=BufferHigh
$ textbuffer(bufnum, _Start)=-1
bufnum=bufferwindows
bufferwindows-=1
* !block%=textbuffer(bufnum, _Handle)
"Wimp_DeleteWindow",,block%
bufferstate=0
bufwindow(win)
loop, buffer
buffer=0
loop=1
bufferwindows
textbuffer(loop, _Handle)=win
buffer=loop
=buffer
gethelp(buffer, line)
info, numlines, command$, newbuf, newbuffer, flags, help, type, mess$, gothelp
(Z"info=textbuffer(buffer, _Info)
line-=1
numlines=!info
line>numlines
report(
mess("LastLine")) :
pointer=!(info+8+line*4)
!pointer=arrow
pointer+=4
command$=$pointer
command$=""
command$=
(10)
$flags=textbuffer(buffer, _Flags)
"help=textbuffer(buffer, _Help)
gothelp=(flags<>0
help<>0)
gothelp
flags=flags?line
help=help!(line*4)
type=(flags
3))>>2
type
1 : mess$="HComm"
2 : mess$="HFil"
3 : mess$="HConf"
)"
4 : mess$="HHelp"
: mess$="HKeyw"
)@>
help flags: code help bit 0, configure bit 1, type<<2
mess$="HKeyw"
)hLnewbuf=
startnewbuffer(
messarg("Help",
mess(mess$), command$, "", ""))
)r4newbuffer=textbuffer(newbuf, _Start)+_TextOffset
!bufpointer=newbuffer
4!bufmaxsize=textbuffer(newbuf, _End)-newbuffer-4
setwindowsize
claim
gothelp
(flags
1)=0
type<>0
3
messarg("DHelp", command$, "", "", "")
help<>0
3
"OS_PrettyPrint", help, 0, command$
mess("NoHelp")
'
"OS_CLI", "Help "+command$
*&$
"OS_CLI", "Help "+command$
release
newbuffer+=!counter
capbuffer(newbuf, newbuffer)
openwindow(textbuffer(newbuf, _Handle))
openhelpwindow
writeicon(win_help, icon_helptext, "")
openwindow(win_help)
setcaret(win_help, icon_helptext)
opencommandwindow
writeicon(win_command, icon_commandmain, "")
loop=icon_arg1
icon_arg4
writeicon(win_command, loop, "")
faint(win_command, loop,
faint(win_command, icon_value,
openwindow(win_command)
setcaret(win_command, icon_commandmain)
command(command$, title$)
newbuf, newbuffer
"newbuf=
startnewbuffer(title$)
4newbuffer=textbuffer(newbuf, _Start)+_TextOffset
!bufpointer=newbuffer
4!bufmaxsize=textbuffer(newbuf, _End)-newbuffer-4
setwindowsize
claim
"OS_CLI", command$
release
!counter>1
newbuffer+=!counter
capbuffer(newbuf, newbuffer)
openwindow(textbuffer(newbuf, _Handle))
removebuffer(newbuf)
helpcommand
keyword$, title$
closewindow(win_help)
,j/keyword$=
readicon(win_help, icon_helptext)
,t=title$=
messarg("Help",
mess("HKeyw"), keyword$, "", "")
command("Help "+keyword$, title$)
starcommand
keyword$, icon, arg$
closewindow(win_command)
5keyword$=
readicon(win_command, icon_commandmain)
valid(keyword$)
opencommandwindow
icon=icon_arg1
icon_arg4
( arg$=
readicon(win_command, icon)
arg$<>""
keyword$+=" "+arg$
-21title$=
messarg("CRes", keyword$, "", "", "")
command(keyword$, title$)
getcommand(buffer, line)
info, numlines, command$, pointer, space, flags, type, help, gothelp, careticon, main$
"info=textbuffer(buffer, _Info)
line-=1
numlines=!info
line>numlines
report(
mess("LastLine")) :
pointer=!(info+8+line*4)
!pointer=arrow
pointer+=4
command$=$pointer
space=
command$, " ")
space>0
command$=
command$, space)
command$=""
command$=
(10)
$flags=textbuffer(buffer, _Flags)
"help=textbuffer(buffer, _Help)
gothelp=(flags<>0
help<>0)
type=0
gothelp
flags=flags?line
type=(flags
3))>>2
opencommandwindow
careticon=icon_commandmain
type
.h6
writeicon(win_command, icon_arg1, command$)
.r+
faint(win_command, icon_arg1,
careticon=icon_arg1
type
K
3: main$=
mess("CConf") :
faint(win_command, icon_value,
&
4: main$=
mess("CHelp")
main$=command$
writeicon(win_command, icon_commandmain, main$)
setcaret(win_command, careticon)
commandhelp
keyword$, cmd$
5keyword$=
readicon(win_command, icon_commandmain)
cmd$=
caseless(keyword$)
cmd$)=" "
cmd$=
cmd$)
cmd$="configure"
cmd$="status"
cmd$="help"
/N1 keyword$=
readicon(win_command, icon_arg1)
command("Help "+keyword$,
messarg("Help",
mess("HComm"), keyword$, "", ""))
valid(keyword$)
cmd$, counter, legal
cmd$=
caseless(keyword$)
counter=0
legal=
cmd$=illegal$(counter)
;
report(
messarg("IllCom", keyword$, "", "", ""))
legal=
counter+=1
illegal$(counter)=""
=legal
showvalue
command$, key$, mess$, arg$
0>@command$=
caseless(
readicon(win_command, icon_commandmain))
command$)=" "
command$=
command$)
command$
0\3
"configure" : key$="status" : mess$="VCon"
0f3
"set" : key$="show" : mess$="VVar"
0p3
"seteval" : key$="show" : mess$="VNum"
0z3
"setmacro" : key$="show" : mess$="VMac"
*arg$=
readicon(win_command, icon_arg1)
arg$)=" "
arg$=
arg$)
command(key$+" "+arg$,
messarg("Val",
mess(mess$), arg$, "", ""))
checkvalue
command$, value
@command$=
caseless(
readicon(win_command, icon_commandmain))
command$)=" "
command$=
command$)
\value=(command$="set"
command$="seteval"
command$="setmacro"
command$="configure")
faint(win_command, icon_value,
value)
openmousewindow
type, item
openwindow(win_mouseact)
1V!tempmouseclick()=mouseclick()
type=_Iconbar
_Window
item=0
1t(
displaymouseclick(type, item)
displaymouseclick(_Window, 3)
setmouseclick(type, item, val)
loop
loop=0
tempmouseclick(type, loop)=val
& tempmouseclick(type, loop)=0
(
displaymouseclick(type, loop)
"tempmouseclick(type, item)=val
displaymouseclick(type, item)
button, out$, pref$, icon
2Z%button=tempmouseclick(type, item)
type=_Iconbar
icon=icon_iconbarclick
icon=icon_winclick
button>0
pref$=""
(button
_Shift)>0
pref$="Shift"
(button
_Ctrl)>0
pref$="Ctrl"
(button
_Alt)>0
pref$="Alt"
pref$<>""
pref$=
mess(pref$)+" "
(button
_Select)>0
out$=pref$+
mess("Sel")
out$=pref$+
mess("Adj")
writeicon(win_mouseact, icon+item*2, out$)
writeicon(win_mouseact, icon+item*2, "")
last(string$, char$)
oldpos, pos
oldpos=-1
3"% pos=
string$, char$, oldpos+1)
pos<>0
oldpos=pos
pos=0
oldpos=-1
=oldpos
savebox(win, openmenu)
title$, last, save$, open$, close$, pos
win=win_modules
savebuffer=
bufwindow(win)
title$=
readwindowtitle(win)
open$=
mess("QuotOpen")
close$=
mess("QuotClosed")
title$, 1)=close$
pos=
last(title$, open$)
pos=0
title$="Viewer"
1 title$=
title$, pos+1,
(title$)-pos-1)
last(title$, " ")
pos=0
save$=title$
4&$ save$=
title$,
(title$)-pos)
writeicon(win_saveas, icon_savetext,
save$, 10))
openmenu
openmenudbox(win_saveas)
setwindowsize
!block%=132
block%!4=133
block%!8=134
block%!12=135
block%!16=-1
"OS_ReadVduVariables", block%, block%+20
4, 28, block%!20, block%!24, block%!28-3, block%!32
savechoices
handle, loop, loop2
handle=
(alias$+".Choices")
prefsort
5 !
alphasort :
#handle, 1
5*$
sequencesort :
#handle, 2
54#
versionsort :
#handle, 3
#handle, showname, showver, showspec, showstatus
#handle, headcolour, textcolour, greycolour
#handle, headfont$, textfont$, greyfont$
loop=0
loop2=0
5z,
#handle, mouseclick(loop, loop2)
#handle
("SetType "+alias$+".Choices Data")
loadchoices
handle, loop, loop2, sort
handle=
(alias$+".Choices")
handle=0
defaultchoices:
#handle, sort
sort
1 : prefsort=alphasort
2 : prefsort=sequencesort
3 : prefsort=versionsort
#handle, showname, showver, showspec, showstatus
#handle, headcolour, textcolour, greycolour
#handle, headfont$, textfont$, greyfont$
loop=0
loop2=0
6`,
#handle, mouseclick(loop, loop2)
#handle
oldprefsort=prefsort
oldshowname=showname
oldshowver=showver
oldshowspec=showspec
oldshowstatus=showstatus
refreshchoices
setfont(headfont$, "Homerton.Bold", headhandle)
setfont(textfont$, "Trinity.Medium", texthandle)
setfont(greyfont$, "Trinity.Medium.Italic", greyhandle)
redrawwindows
defaultchoices
prefsort=sequencesort
showname=Short
showver=
showspec=
showstatus=
headcolour=11
textcolour=7
greycolour=3
headfont$="Homerton.Bold"
textfont$="Trinity.Medium"
%greyfont$="Trinity.Medium.Italic"
cmouseclick()=_Select,_Adjust,_Shift+_Select,0, _Select, _Adjust, _Shift+_Select, _Shift+_Adjust
Errors
finish
mess("Err")+
!bufferclaimed=1
release
$block%="TASK"
WimpInit
"Wimp_CloseDown", TaskHandle, !block%
error
result
, "Internal error code "+
)+": "+
bufferclaimed<>-1
8h%
!bufferclaimed=1
release
!block%=
0$(block%+4)=
mess("Err")+
)+": "+
$+"."+
"Wimp_ReportError", block%, 3, taskname$
,result
result=2
areyousure
error :
doneiconbar
faint(-2, baricon%,
bufferstate<>-1
bufferstate<=16
E
capbuffer(bufferstate, textbuffer(bufferstate, _Start)+16)
)
removebuffer(bufferstate
pollloop
areyousure
result
$(block%+4)=
mess("Sure")
"Wimp_ReportError", block%, 23,
mess("Mess")+taskname$
,result
result=1
finish
report(string$)
text$
!block%=0
$(block%+4)=string$
"Wimp_ReportError", block%, 3, taskname$
,result
result=2
areyousure
Keys
checkkeys
window, icon, caretpos, char, command$
icon$, add$, nexticon
window=!block%
icon=block%!4
caretpos=block%!20
char=block%!24
process=
window
win_command
/
icon=icon_commandmain
checkvalue
char
13 :
starcommand
-
27 :
closewindow(win_command)
"
icon<icon_arg4
1
faint(win_command, icon+1,
0 icon$=
readicon(window, icon)
(
(icon$)>caretpos
A
writeicon(window, icon,
icon$, caretpos))
;$7 add$=
icon$,
(icon$)-caretpos-1)
;.% nexticon=icon+1
;86
nexticon<icon_arg4
add$<>""
;B: icon$=
readicon(window, nexticon)
;L&
icon$<>""
;V>
writeicon(window, nexticon, add$)
;`& add$=icon$
;t>
writeicon(window, nexticon, add$)
;~# add$=""
7
faint(window, nexticon,
$ nexticon+=1
"
add$<>""
; icon$=
readicon(window, icon_arg4)
F
writeicon(window, icon_arg4, add$+" "+icon$)
1
setcaret(win_command, icon+1)
O
8, 127, &18F, &19F, &1AF, &1BF :
backspace, delete or up-arrow
)
icon>icon_commandmain
6
readicon(win_command, icon)=""
2
faint(win_command, icon,
K
icon=icon_arg1
faint(win_command, icon_value,
<(M
writeicon(window, icon-1,
readicon(window, icon-1)))
<24
setcaret(win_command, icon-1)
<P!
&1AB :
Ctrl-Copy
<Z1
writeicon(win_command, icon, "")
<d,
setcaret(win_command, icon)
<n4
&18E, &19E, &1AE, &1BE :
down-arrow
<x"
icon<icon_arg4
3
readicon(window, icon+1)=""
K
writeicon(window, icon,
readicon(window, icon)+" ")
4
setcaret(win_command, icon+1)
4
faint(win_command, icon+1,
: process=
win_help
char
13 :
helpcommand
*
27 :
closewindow(win_help)
: process=
: process=
process
"Wimp_ProcessKey", char
Menus
menuinit
menu 255
Iconmenu%=
dimmenu(5)
Modulemenu%=
dimmenu(7)
Mainmenu%=
dimmenu(4)
Displaymenu%=
dimmenu(8)
Choicesmenu%=
dimmenu(6)
Coloursmenu%=
dimmenu(3)
Fontsmenu%=
dimmenu(3)
Headingmenu%=
dimmenu(16)
Normalmenu%=
dimmenu(16)
Greyedmenu%=
dimmenu(16)
Viewermenu%=
dimmenu(3)
Fontmenu%=-1
menu$(70), submenu(70)
menubuf 70*30
validation 4
!validation=0
IndMenuPos=0
dimmenu(numopts)
menu% 28+(numopts*24)
=menu%
setupmenu(tok$, numents)
menu
menu=0
numents
>l& menu$(menu)=
mess(tok$+
(menu))
submenu(menu)=-1
buildmenus
IndMenuPos=0
menu_info=0
menu_modules=1
menu_help=2
menu_command=3
menu_quit=4
setupmenu("M1", 4)
submenu(menu_info)=win_info
menu(
mess("M1T"), 5, Iconmenu%)
menu_sortname=0
menu_sortnum=1
menu_sortver=2
menu_shortname=3
menu_longname=4
menu_showver=5
menu_showstatus=6
menu_showspec=7
setupmenu("M20", 7)
/menu$(menu_sortnum)="/"+menu$(menu_sortnum)
menu(
mess("M20T"), 8, Displaymenu%)
menu_modinfo=0
menu_modhelp=1
menu_moddelete=2
menu_modreinit=3
menu_modunplug=4
menu_modfaster=5
menu_modromver=6
setupmenu("M21", 6)
%submenu(menu_modinfo)=win_modinfo
menu(
mess("M21T"), 7, Modulemenu%)
colourmenu(Headingmenu%,
mess("MColT"))
colourmenu(Normalmenu%,
mess("MColT"))
colourmenu(Greyedmenu%,
mess("MColT"))
menu_heading=0
menu_normal=1
menu_greyed=2
setupmenu("M220", 2)
@j&submenu(menu_heading)=Headingmenu%
@t$submenu(menu_normal)=Normalmenu%
@~$submenu(menu_greyed)=Greyedmenu%
menu(
mess("M220T"), 3, Coloursmenu%)
loop=menu_heading
menu_greyed
" menu$(loop)="!"+menu$(loop)
menu(
mess("M221T"), 3, Fontsmenu%)
menu_colours=0
menu_fonts=1
menu_mouseact=2
menu_savechoices=3
menu_revertchoices=4
menu_defaultchoices=5
setupmenu("M22", 5)
&submenu(menu_colours)=Coloursmenu%
"submenu(menu_fonts)=Fontsmenu%
menu(
mess("M22T"), 6, Choicesmenu%)
menu_viewerhelp=0
menu_viewercommand=1
menu_viewersave=2
setupmenu("M3", 2)
AZ5menu$(menu_viewersave)="!"+menu$(menu_viewersave)
Ad'submenu(menu_viewersave)=win_saveas
menu(
mess("M3T"), 3, Viewermenu%)
ModIndPos=IndMenuPos
buildmodulemenu
mod=prefsort?selmod
IndMenuPos=ModIndPos
menu_display=0
menu_module=1
menu_choices=2
menu_rescan=3
setupmenu("M2", 3)
=menu$(menu_module)=
messarg("M21", mod$(mod), "", "", "")
&submenu(menu_display)=Displaymenu%
B"$submenu(menu_module)=Modulemenu%
B,&submenu(menu_choices)=Choicesmenu%
menu(
mess("M2T"), 4, Mainmenu%)
faintmenu(Modulemenu%, menu_modhelp, status?mod=3
status?mod=4)
faintmenu(Modulemenu%, menu_moddelete,
moduleop)
faintmenu(Modulemenu%, menu_modreinit,
moduleop)
faintmenu(Modulemenu%, menu_modunplug,
(status?mod>=4
moduleop))
faintmenu(Modulemenu%, menu_modfaster,
(status?mod>=4
moduleop))
faintmenu(Modulemenu%, menu_modromver,
(status?mod=2)
moduleop)
tickmenu(Headingmenu%, headcolour,
tickmenu(Greyedmenu%, greycolour,
tickmenu(Normalmenu%, textcolour,
dofunctions
choice, loop
$choice=
numtohandle(menunumber%)
currenthandle%
Iconmenu%
choice
Iconmenu%
item%
C05
menu_modules :
openmodulewindow
C:0
menu_help :
openhelpwindow
CD6
menu_command :
opencommandwindow
CN(
menu_quit :
finish
Mainmenu%
choice
Mainmenu%
item%
menu_rescan
# modulesread=
* oldprefsort=prefsort
* oldshowname=showname
( oldshowver=showver
* oldshowspec=showspec
. oldshowstatus=showstatus
+ prefsort=sequencesort
"
readmodules
Displaymenu%
item%
8
menu_sortname : prefsort=alphasort
;
menu_sortnum : prefsort=sequencesort
D :
menu_sortver : prefsort=versionsort
D*4
menu_shortname : showname=Short
D43
menu_longname : showname=Long
D>7
menu_showver : showver=
showver
DH9
menu_showspec : showspec=
showspec
DR=
menu_showstatus: showstatus=
showstatus
Df'
item%<=menu_sortver
Dp6
loop=menu_sortname
menu_sortver
DzA
tickmenu(Displaymenu%, loop, (item%=loop))
G
tickmenu(Displaymenu%, menu_shortname, showname=Short)
E
tickmenu(Displaymenu%, menu_longname, showname=Long)
>
tickmenu(Displaymenu%, menu_showver, showver)
@
tickmenu(Displaymenu%, menu_showspec, showspec)
D
tickmenu(Displaymenu%, menu_showstatus, showstatus)
B
item%>menu_sortver
recalctabs :
moduleextent
)
forceredraw(win_modules)
Modulemenu%
item%
-
menu_modhelp :
modhelp
:
menu_moddelete:
modcommand("RMKill")
<
menu_modreinit:
modcommand("RMReInit")
:
menu_modunplug:
modcommand("Unplug")
<
menu_modfaster:
modcommand("RMFaster")
E$T
menu_modromver:
modcommand("RMKill") :
modcommand("RMReInit")
Choicesmenu%
item%
EL5
menu_mouseact :
openmousewindow
EV4
menu_savechoices :
savechoices
E`(
menu_defaultchoices
Ej%
defaultchoices
Et%
refreshchoices
E~#
moduleextent
'
openmodulewindow
'
menu_revertchoices
"
loadchoices
%
refreshchoices
#
moduleextent
'
openmodulewindow
F
Headingmenu% :
choosecolour(choice, item%, headcolour)
F
Normalmenu% :
choosecolour(choice, item%, textcolour)
F
Greyedmenu% :
choosecolour(choice, item%, greycolour)
decodefontmenu
Viewermenu%
item%
C
menu_viewerhelp :
gethelp(viewerbuffer, viewerline)
F(I
menu_viewercommand :
getcommand(viewerbuffer, viewerline)
choosecolour(menu%, item%,
col)
handle
col<>item%
tickmenu(menu%, col,
tickmenu(menu%, item%,
col=item%
redrawwindows
redrawwindows
loop
forceredraw(win_modules)
loop=0
numbuffers
' handle=textbuffer(loop, _Handle)
handle<>0
forceredraw(handle)
numtohandle(menunumber%)
menuhandle%
menunumber%
GT$
1 : menuhandle% = Iconmenu%
G^$
2 : menuhandle% = Mainmenu%
Gh(
20 : menuhandle% = Displaymenu%
Gr'
21 : menuhandle% = Modulemenu%
G|(
22 : menuhandle% = Choicesmenu%
220 : menuhandle% = Coloursmenu%
2200 : menuhandle% = Headingmenu%
2201 : menuhandle% = Normalmenu%
2202 : menuhandle% = Greyedmenu%
221 : menuhandle% = Fontsmenu%
=menuhandle%
handletonum(menuhandle%)
menunumber%
menuhandle%
Iconmenu% : menunumber%=1
Mainmenu% : menunumber%=2
Displaymenu% : menunumber%=20
Modulemenu% : menunumber%=21
H&&
Choicesmenu% : menunumber%=22
H0'
Coloursmenu% : menunumber%=220
H:(
Headingmenu% : menunumber%=2200
HD'
Normalmenu% : menunumber%=2201
HN'
Greyedmenu% : menunumber%=2202
HX%
Fontsmenu% : menunumber%=221
=menunumber%
fontmenu(font$)
menubufsize, menuindsize, wantsize
menu, ind
Fontmenu%<>-1
=Fontmenu%
"Font_ListFonts",, 0, (7<<19), 0, 0, 0, 0
,,,menubufsize,,menuindsize
"Wimp_SlotSize", -1, -1
slotsize, , free
.wantsize=(menubufsize+menuindsize+7)
free>=wantsize
menu=
% ind=(menu+menubufsize+3)
+slotsize+wantsize
report(
mess("MenuMem"))
pollloop
font$<>""
I*P
"Font_ListFonts",, menu, (7<<19), menubufsize, ind, menuindsize, font$
I>L
"Font_ListFonts",, menu, (7<<19), menubufsize, ind, menuindsize, 1
IR =menu
decodefontmenu
findfont$, pos, icon, std, territory, start, system, fonthandle
system=(block%!12=0)
block%!256=0
"XFont_DecodeMenu", 0, Fontmenu%, block%+12, block%+256, 256
(findfont$=
readstring(block%+256, 0)
findfont$=""
system
font$=""
std=
findfont$, "\F")
" territory=
findfont$, "\f")
std+territory=0
report(
mess("Font"), 0) :
territory>0
- start=
findfont$, " ", territory)+1
start=std+2
J.$ pos=
findfont$, "\", start+1)
J8#
pos=0
pos=
(findfont$)+1
JB* font$=
findfont$, start, pos-start)
"Wimp_GetPointerInfo",,block%+128
(block%!136
1) =1
=Fontmenu%
Fontmenu%=-1
! Fontmenu%=
fontmenu(font$)
reopenmenu(currenthandle%, menux%, menuy%)
currenthandle%=0
=Fontmenu%
Fontmenu%=-1
fonttype
Text
7
setfont(font$, "Trinity.Medium", texthandle)
textfont$=font$
Heading
6
setfont(font$, "Homerton.Bold", headhandle)
headfont$=font$
Greyed
K<>
setfont(font$, "Trinity.Medium.Italic", greyhandle)
greyfont$=font$
redrawwindows
setfont(
font$, def$,
fonthandle)
fonthandle<>-1
"Font_LoseFont", fonthandle
font$<>""
"XFont_FindFont",,font$, fontsize*16, fontsize*16, 0, 0
fonthandle;flags
(flags
1)>0
P
"XFont_FindFont",,def$, fontsize*16, fontsize*16, 0, 0
fonthandle
font$=def$
Mouse
icons
*** Info box (win_info) ***
icon_version=7
*** Module info box (win_modinfo) ***
icon_modname=4
icon_modver=5
icon_modspecial=6
icon_modstatus=7
*** Help box (win_help) ***
icon_helptext=1
icon_cancel=2
icon_OK=3
*** Command box (win_command) ***
icon_cancel and icon_OK as win_help
icon_help=4
icon_value=5
icon_commandmain=7
icon_arg1=8
icon_arg2=9
icon_arg3=10
icon_arg4=11
*** Mouse clicks box (win_mouseact) ***
icon_cancel and icon_OK already defined
icon_iconbarclick=5
icon_winclick=13
*** Save window (win_saveas) ***
icon_cancel and icon_OK (well, icon_save really) already define
icon_saveicon=0
icon_savetext=1
click(type, button)
comworks, match, mod, buffer, line, loop
button+=_Shift
button+=_Ctrl
button+=_Alt
comworks=
type=_ModWin
type=_Window : comworks=
match=-1
loop=0
mouseclick(type, loop)=button
match=loop
match<>-1
type
_Iconbar
match
N /
_IconMod :
openmodulewindow
N*-
_IconHelp :
openhelpwindow
N40
_IconComm :
opencommandwindow
_Window
comworks
N\* buffer=
bufwindow(window%)
Nf+ line=
winline(window%, my%)
match
Nz7
_WinHelp :
gethelp(buffer, line)
:
_WinComm :
getcommand(buffer, line)
5
_WinSave :
savebox(window%,
6
_WinClose :
removebuffer(buffer)
# mod=prefsort?selmod
match
K
_WinHelp :
(status?mod<3
status?mod>4)
modhelp
:
_WinClose :
closewindow(win_modules)
checkmouse(mx%, my%, button%, window%, icon%)
buffer, mod, keyword$
item, type
button%=2
window%
O~8
-2 :
ploticonmenu(Iconmenu%, mx%)
win_modules
# selmod=
modnumber(my%)
buildmodulemenu
+
plotmenu(Mainmenu%, mx%, my%)
viewerwin=window%
- viewerbuffer=
bufwindow(window%)
. viewerline=
winline(window%, my%)
-
plotmenu(Viewermenu%, mx%, my%)
window%
&
click(_Iconbar, button%)
win_modules
# selmod=
modnumber(my%)
P( mod=prefsort?selmod
P2%
click(_ModWin, button%)
win_help
icon%
PP6
icon_cancel :
closewindow(win_help)
icon_OK
helpcommand
Pn0
button%=1
openhelpwindow
win_command
icon%
9
icon_cancel :
closewindow(win_command)
icon_OK
starcommand
3
button%=1
opencommandwindow
*
icon_help :
commandhelp
)
icon_value :
showvalue
win_saveas
icon%
8
icon_cancel :
closewindow(win_saveas)
S
icon_saveicon :
startdrag("file_fff", win_saveas, icon_saveicon)
win_mouseact
icon%
Q":
icon_cancel :
closewindow(win_mouseact)
icon_OK
Q60 mouseclick()=tempmouseclick()
Q@&
button%=_Select
QJ0
closewindow(win_mouseact)
Q^&
openmousewindow
Q|+
icon%>=icon_winclick
" type=_Window
2 item=(icon%-icon_winclick)/2
# type=_Iconbar
6 item=(icon%-icon_iconbarclick)/2
% button%+=_Shift
' button%+=_Ctrl
.
button%+=_Alt
6
setmouseclick(type, item, button%)
R&1
displaymouseclick(type, item)
RD%
click(_Window, button%)
startdrag(spr$, win, icon)
!block%=win
"Wimp_GetWindowState",,block%
block%!36=win
block%!40=icon
"Wimp_GetIconState",,block%+36
block%!44+=block%!4
block%!48+=block%!16
block%!52+=block%!4
block%!56+=block%!16
"DragASprite_Start", %10000000, 1, spr$, block%+44
Wimp
startwimp
$block%="TASK"
"Wimp_Initialise", 310, !block%, taskname$, messblock
version, TaskHandle
SYS "Vigil_RegisterApplication", TaskHandle
WimpInit=
readstring(offset, end)
A%=offset
B%=string
stringread
=$string
readwindowtitle(window%)
!block%=window%
"Wimp_GetWindowInfo",,block%+1
readstring(block%!76, 0)
iconbar(spname$)
width
"Wimp_SpriteOp", 256+40,, spname$
,,,width
!block%=-1
block%!4=0
block%!8=0
block%!12=width+32
block%!16=96
block%!20=&2102
block%!24
(spname$)
$(block%!24)=spname$
block%!28=1
block%!32=(
spname$+1)
"Wimp_CreateIcon",,block%
icon%
doneiconbar=
=icon%
writeicon(window%, icon%, string$)
!block%=window%
block%!4=icon%
"Wimp_GetIconState",,block%
(block%!24
1<<23)>1
report(
mess("IcDel"))
$(block%!28)=string$
"Wimp_ForceRedraw", !block%, block%!8, block%!12, block%!16, block%!20
readicon(window%, icon%)
!block%=window%
block%!4=icon%
"Wimp_GetIconState",,block%
(block%!24
1<<23)>1
report("Read: "+
mess("Icdel")) : =""
=$(block%!28)
faint(window%, icon%, faint%)
mask, set
mask=1<<22
set=(-faint%)<<22
faint%
mask+=1<<21
seticonstate(window%, icon%, mask, set)
faint(window%, icon%)
loop
!block%=window%
block%!4=icon%
"Wimp_GetIconState",,block%
=((block%!24
1<<22)>0)
seticonstate(window%, icon%, mask, bits)
!block%=window%
block%!4=icon%
block%!8=bits
block%!12=mask
"Wimp_SetIconState",,block%
msgtrans
flags, buflength
"MessageTrans_FileInfo", , alias$+".Messages"
flags, ,buflength
(flags
1)=0
MsgBuffer buflength
MsgDescript 20
[6M
"MessageTrans_OpenFile", MsgDescript, alias$+".Messages", MsgBuffer
[J<
report("Hey, these messages are already in memory.")
mess(tok$)
loop, in, out$, pointer, length
in (
(tok$)+1)*2
$in=tok$+":"+tok$
?(in+
($in))=0
"MessageTrans_Lookup", MsgDescript, in, 0, 0, 0, 0, 0, 0
,,pointer,length
loop=0
length-1
out$+=
(pointer?loop)
=out$
messarg(tok$, arg1$, arg2$, arg3$, arg4$)
loop, in$, out$, buffer, pointer, length
in (
(tok$)+1)*2, buffer 256
$in=tok$+":"+tok$
?(in+
($in))=0
"MessageTrans_Lookup", MsgDescript, in, buffer, 256, arg1$, arg2$, arg3$, arg4$
,,pointer, length
loop=0
length-1
out$+=
(pointer?loop)
\X =out$
setcaret(window, icon)
"Wimp_SetCaretPosition", window, icon, -1, -1, -1,
readicon(window, icon))
caseless(str$)
$string=str$
A%=string
caseless
=$string
WimpMenus
colourmenu(menu%, title$)
colour, flags, offset
$menu%=title$
menu%!12=&70207
menu%!16=
(title$)*16+16
menu%!20=44
menu%!24=0
colour=0
offset=menu%+28+colour*24
!offset=0
colour=15
!offset=&80
offset!4=-1
^.6 offset!8=&29+(textcol(colour)<<24)+(colour<<28)
$(offset+12)=
(colour)
menu(title$, items, menu%)
offset, width, loop
char$, pos
option$, item$
place, length
menupos, flags, icondata
width=0
loop=1
items
item$=menu$(loop-1)
width<
(item$)
width=
(item$)
width>30
width=30
(title$)>width
width=
(title$)
$menu%=title$
menu%!12=&70207
menu%!16=width*16+16
menu%!20=44
menu%!24=0
offset=28
menupos=0
item$=menu$(menupos)
pos=1
char$=
char(item$, pos)
option$=""
flags=0
icondata=&7000021
"/-|!:#", char$)
char$
&
"/" : flags+=1 :
tick
5
"-" : flags+=2 :
dotted line follows
0
"|" : flags+=4 :
writeable item
2
"!" : flags+=8 :
generate message
C
"#" : flags+=16 :
allow submenu even if greyed out
+
":":icondata+=2^22 :
faint
! char$=
char(item$, pos)
menu%!offset=flags
menu%!(offset+8)=icondata
pos<=
(item$)+1
option$+=char$
`,! char$=
char(item$, pos)
length=
(option$)
`J0
length>30
option$=
option$, 27)+"..."
length>12
IndMenuPos+=1
icondata+=2^8
`r# menu%!(offset+8)=icondata
`|' place=menubuf+(IndMenuPos*30)
" !(menu%+offset+12)=place
' !(menu%+offset+16)=validation
" !(menu%+offset+20)=width
?(place+length)=0
place=menu%+offset+12
$place=option$
( menu%!(offset+4)=submenu(menupos)
menupos=items-1
menu%!offset+=2^7
offset+=24
menupos+=1
menupos=items
menu%=Iconmenu%
menuheight%=items*44+96
char(string$,
pos)
pos+=1
string$, pos-1, 1)
plotmenu(menuhandle%, menux%, menuy%)
currenthandle%=menuhandle%
"Wimp_CreateMenu",,currenthandle%, menux%-64, menuy%
reopenmenu(menuhandle%, menux%, menuy%)
"Wimp_CreateMenu",,currenthandle%, menux%-64, menuy%
currenthandle%=menuhandle%
ploticonmenu(menuhandle%, menux%)
currenthandle%=menuhandle%
"Wimp_CreateMenu",,currenthandle%, menux%-64, menuheight%
openmenudbox(window)
"Wimp_GetPointerInfo",,block%
"Wimp_CreateMenu",,window, !block%-64, block%!4
menuselect
"Wimp_GetPointerInfo",,block%+128
but%=block%!136
decodemenu(block%)
dofunctions
decodemenu(read)
address, itemstart, offset, menu, newmenu
ct,menunumber%=
handletonum(currenthandle%)
address=!read
+ menunumber%=(menunumber%*10)+address
read+=4
!read=-1
(menunumber%=(menunumber%-address)/10
item%=address
faintmenu(menuhandle%, menuitem%, faint%)
val, bit22
'val=menuhandle%!(24*(menuitem%)+36)
bit22=((val
2^22)>0)
bit22
val-=2^22
faint%
val+=2^22
d('menuhandle%!(24*(menuitem%)+36)=val
tickmenu(menuhandle%, menuitem%, tick%)
val, bitset
dn'val=menuhandle%!(24*(menuitem%)+28)
bitset=((val
1)>0)
bitset
val-=1
tick%
val+=1
'menuhandle%!(24*(menuitem%)+28)=val
WimpMess
messageinit
messblock 256
palette 80, colourtrans 256
input 20, output 20
pos=-4
pos+=4
messblock!pos
messblock!pos=0
2, 10, &502, &400C0, &400C1, &400C9, 0
message(reason%)
actioncode, num, address
originhandle=block%!4
actioncode=block%!16
actioncode
0 :
finish
2 :
saveack
10 :
savedesktop
&502 :
&400C0 :
opensubmenu
&400C1 :
getmodevars
&400C9
Fontmenu%<>-1
=Fontmenu%
Fontmenu%=-1
opensubmenu
submenu, x, y
submenu=block%!20
x=block%!24
y=block%!28
submenu
fv%
win_modinfo :
fillinmodinfo
win_saveas
savebox(viewerwin,
submenu=win_saveas
Greyedmenu%
newfonttype(Greyed)
( Fontmenu%=
fontmenu(greyfont$)
submenu=Fontmenu%
Normalmenu%
newfonttype(Text)
( Fontmenu%=
fontmenu(textfont$)
submenu=Fontmenu%
Headingmenu%
newfonttype(Heading)
g ( Fontmenu%=
fontmenu(headfont$)
submenu=Fontmenu%
submenu=Fontmenu%
"Wimp_CreateSubMenu", , submenu, x, y
submenux=x
submenuy=y
newfonttype(type)
fonttype<>type
fonttype=type
=Fontmenu%
Fontmenu%=-1
getmodevars
input, output
input 24, output 24
6!input=130:
Right-hand column of graphics window
.input!4=131 :
Top row of graphics window
=input!8=4 :
XEigFactor, shift pixels to obtain OS units
input!12=5 :
YEigFactor
input!16=9 :
Log2BPP
input!20=-1
26 :
Reset window just in case
"OS_ReadVduVariables", input, output
XEigFactor=output!8
YEigFactor=output!12
BPP=(1<<output!16)/8
ht!MaxXCoord=!output<<XEigFactor
h~"MaxYCoord=output!4<<YEigFactor
"ColourTrans_SelectTable", 12, palette, -1, -1, colourtrans
window, icon
mess$, text$
addicon, style$
faint, mod, ver$
window=block%!32
icon=block%!36
text$="" : mess$=""
block%+=128
"Wimp_GetPointerInfo",,block%
&faint=
faint(block%!12, block%!16)
addicon=
window
win_info : mess$="HI"
iF#
win_modinfo : mess$="H2MI"
win_help : mess$="HH"
iZ!
win_command : mess$="HC"
id#
win_mouseact : mess$="HAM"
in!
win_saveas : mess$="HSA"
ix'
-2 : mess$="HIcon" : addicon=
win_modules:
addicon=
3 mod=prefsort?
modnumber(!(block%-128+24))
ver$=ver$(mod)
3
spec$(mod)<>""
ver$+="
"+spec$(mod)
V text$=
messarg("HModW", mod$(mod), name$(mod), ver$, modstatus$(status?mod))
9
"Wimp_GetMenuState", 1, block%, window, icon
!block%<>-1
decodemenu(block%)
/ mess$="HM"+
(menunumber%)+
(item%)
!
faint
mess$+="G"
addicon=
mess$="HO"
block%-=128
addicon
icon
-1 : mess$+="W"
: mess$+=
(icon)
block%!16=&503
text$=""
mess$<>""
text$=
mess(mess$)
text$=""
$(block%+20)=text$
?(block%+20+
(text$))=0
!block%=24+(
(text$)
4)*4
block%!12=block%!8
"Wimp_SendMessage", 17, block%, block%!4
savedesktop
handle
handle=block%!20
#handle, StartCLIGuard$
dragged
window, icon, save$
"Wimp_GetPointerInfo",,block%
window=block%!12
icon=block%!16
.save$=
readicon(win_saveas, icon_savetext)
block%!20=window
block%!24=icon
block%!28=!block%
block%!32=block%!4
Iblock%!36=textbuffer(savebuffer, _End)-textbuffer(savebuffer, _Start)
block%!40=&FFF
$(block%+44)=save$+
#!block%=44+(
(save$)+4)
block%!12=0
block%!16=1
"Wimp_SendMessage", 17, block%, window, icon
saveack
file$, filetype, info, file, maxline, line
filetype=block%!40
l4#file$=
readstring(block%+44, 0)
l>&info=textbuffer(savebuffer, _Info)
maxline=!info
file=
(file$)
pointer=info+8
line=0
maxline
#file, $(!pointer)
pointer+=4
#file
("SetType "+file$+" &"+
~(filetype))
block%!12=block%!8
block%!16=3
"Wimp_SendMessage", 17, block%, block%!4
Windows
loadtemplates(file$)
loop, winpos, win, ind, slotsize, templates, free
"Wimp_OpenTemplate",,file$
"Wimp_SlotSize", -1, -1
slotsize, , free
free<>0
templates=
winsize=free
+slotsize+free
templates=0
mV win_info=
loadwindow("info")
m`&win_modinfo=
loadwindow("modinfo")
mj&win_modules=
loadwindow("modules")
mt win_help=
loadwindow("help")
m~&win_command=
loadwindow("command")
(win_mouseact=
loadwindow("mouseact")
$win_saveas=
loadwindow("saveas")
templates<>0
=templates
"Wimp_LoadTemplate",,-1,,,, "modhelp", 0
,modhelpwinsize,indsize
modhelpwin modhelpwinsize
ind indsize
"Wimp_LoadTemplate",,modhelpwin, ind, ind+indsize, -1, "modhelp",0
"Wimp_CloseTemplate"
loadwindow(win$)
win, bufsize, indsize, buffer, ind
"Wimp_LoadTemplate",,-1,,,, win$, 0
,bufsize, indsize
templates=0
buffer bufsize
buffer=templates
ind indsize
"Wimp_LoadTemplate",,buffer, ind, ind+indsize, -1, win$, 0
"Wimp_CreateWindow",,buffer
openwindow(window%)
!block%=window%
"Wimp_GetWindowState",,block%
"Wimp_OpenWindow",,block%
closewindow(window%)
!block%=window%
close
close
buffer, loop
"Wimp_CloseWindow",,block%
!block%=win_modules
winopen_modules=
buffer=-1
loop=1
bufferwindows
!block%=textbuffer(loop, _Handle)
buffer=loop
buffer<>-1
removebuffer(buffer)
forceredraw(window%)
!block%=window%
"XWimp_GetWindowState",,block%
"XWimp_ForceRedraw", -1, block%!4, block%!8, block%!12, block%!16
redraw
more
worky0, worky1
first, last
line, x, y, maxy, mod
maxline, buffer, info, pointer, text
printcolour
buffer=-1
printcolour=textcolour
!block%=win_modules
maxline=nummodules-1
buffer=0
! buffer=
bufwindow(!block%)
buffer=-1
L
report("What the hell is this window someone told me to redraw?")
( info=textbuffer(buffer, _Info)
maxline=!info
"Wimp_RedrawWindow",,block%
more
more
"Wimp_SetColour", textcolour
buffer>=0
q $ maxy=(block%!16-block%!24)
worky0=block%!32-maxy
worky1=block%!40-maxy
first=
(-worky1/32)
qH! last=
(-worky0/32+1.50)
qR)
first>maxline
first=maxline
q\'
last>maxline
last=maxline
qf x=block%!4+4-block%!20
buffer=0
qz
line=first
last
y=maxy-8-line*32
% mod=prefsort?(line+1)
F
status?mod=3
status?mod=4
printcolour=greycolour
c
showname=Short
print(mod$(mod), x, y)
print(name$(prefsort?(line+1)), x, y)
=
showver
print(ver$(mod), x+vertab*16, y)
P
showstatus
print(modstatus$(status?mod), x+statustab*16, y)
@
showspec
print(spec$(mod), x+spectab*16, y)
F
status?mod=3
status?mod=4
printcolour=textcolour
# pointer=info+8+first*4
line=first
last
text=!pointer
!text=arrow
) printcolour=headcolour
7
print($(text+4), x, maxy-8-line*32)
r$) printcolour=textcolour
r83
print($text, x, maxy-8-line*32)
pointer+=4
rt,
"Wimp_GetRectangle",,block%
more
print(text$, x, y)
fonthandle
fonthandle=-1
printcolour
textcolour : fonthandle=texthandle
greycolour : fonthandle=greyhandle
headcolour : fonthandle=headhandle
fonthandle=-1
x, y
printcolour<>textcolour
*
"Wimp_SetColour", printcolour
text$
s2)
"Wimp_SetColour", textcolour
text$
sd$
"Font_SetFont", fonthandle
seD
"ColourTrans_SetFontColours", fonthandle, &FFFFFF00, 0, 14
snA
"Font_Paint", fonthandle, text$, (1<<4)+(1<<9), x, y-24